package com.test.sort;

import java.util.Arrays;

/**
 * https://www.toutiao.com/i6871840346326696455/?tt_from=copy_link&utm_campaign=client_share&timestamp=1608879088&app=news_article&utm_source=copy_link&utm_medium=toutiao_android&use_new_style=1&req_id=20201225145127010131057069272AAD81&group_id=6871840346326696455
 * 冒泡排序
 */
public class BubbleSort extends BaseSort {
    public static void main(String[] args) {
        //1纳秒=0.000001 毫秒=10的负6次方毫秒
        //一秒的10亿分之一，即等于10的负9次方秒。常用作 内存读写速度的单位
        long start = System.nanoTime();
        BaseSort sort = new BubbleSort();
        int[] a = {8, 2, 1, 6, 3, 9, 5, 7, 23, 13};
        sort.sort(a);
        long end = System.nanoTime();
        System.err.println((end-start)+"纳秒");
        Arrays.stream(a).forEach(System.out::println);

    }

    @Override
    protected void sort(int[] nums) {
        if (nums == null || nums.length < 2) {
            return;
        }
        //使用了双重for循环
        //平均时间复杂度：O(n²)
        //空间复杂度：O(1)
        //算法稳定性：稳定
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = 0; j < nums.length - i - 1; j++) {
                //冒泡升序排序
                //比较相邻的元素。如果第一个比第二个大，就交换它们两个
                if (nums[j] > nums[j + 1]) {
                    int temp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = temp;
                }
            }
        }
    }




}
